package logic;


public class opMovimento implements Comparable<opMovimento>{
	private Integer[][] mat;
	private int porb;
	private int x;
	private int y;
	private int numBracos;
	private int ramo;
	private int ins;
	private int numOp;
	private int numFlowsConcluidos;
	public Integer[][] getMat() {
		return mat;
	}
	public void setMat(Integer[][] mat) {
		this.mat = mat;
	}
	public int getPorb() {
		return porb;
	}
	public void setPorb(int porb) {
		this.porb = porb;
	}

	public opMovimento(Integer[][] m, int p, int x, int y,int nb,int ramo,int nO,int nf)	
	{
		this.mat=m;
		this.porb=p;
		this.x=x;
		this.y=y;
		this.setNumBracos(nb);
		this.ramo=ramo;
		this.setNumOp(nO);
		this.numFlowsConcluidos=nf;
	
	}
	public int getColor()
	{
		return mat[this.x][this.y];
	}
	public boolean equals(Object o)
	{
		opMovimento op=(opMovimento) o;
		return(op.getX()==this.x && op.getY()==this.y && this.getColor()==op.getColor());
	}
	public int getX() {
		return x;
	}
	public void setX(int x) {
		this.x = x;
	}
	public int getY() {
		return y;
	}
	public void setY(int y) {
		this.y = y;
	}

	@Override
	public int compareTo(opMovimento arg0) {
		int ocupado=this.mat.length*this.mat.length;
		int ocupado2=ocupado;
		ocupado=ocupado-this.numBracos;
		ocupado2=ocupado2-arg0.getNumBracos();
		ocupado=ocupado*2;
		ocupado2=ocupado2*2;
		int nFc1=this.numFlowsConcluidos*50;
		int nFc2=arg0.getNumFlowsConcluidos()*50;
		ocupado+=nFc1;
		ocupado2+=nFc2;
		if((this.porb+ocupado)<(arg0.getPorb()+ocupado2))
			return 1;
		if((this.porb+ocupado)==(arg0.getPorb()+ocupado2))
		{
			return 0;
		}
		return -1;
	}
	public int getNumBracos() {
		return numBracos;
	}
	public void setNumBracos(int numBracos) {
		this.numBracos = numBracos;
	}
	public int getRamo() {
		return ramo;
	}
	public void setRamo(int ramo) {
		this.ramo = ramo;
	}

	public int getIns() {
		return ins;
	}
	public void setIns(int ins) {
		this.ins = ins;
	}
	public int getNumOp() {
		return numOp;
	}
	public void setNumOp(int numOp) {
		this.numOp = numOp;
	}
	public int getNumFlowsConcluidos() {
		return numFlowsConcluidos;
	}
	public void setNumFlowsConcluidos(int numFlowsConcluidos) {
		this.numFlowsConcluidos = numFlowsConcluidos;
	}
}
